Einleitung
Im ersten Teil der Analyse konnte eine Übersicht über den Datensatz gewonnen werden. Im zweiten Teil wird nun untersucht, ob inkongruente Reize die Reaktionszeit signifikant beeinflussen. Hierzu werden Hypothesentest genutzt.
Die Null- und Gegenhypothese lauten:
H0: Die inkongruente Färbung der Buttons hat keine Auswirkung auf die Reaktionszeit.
H1: Die inkongruente Färbung der Buttons hat eine Auswirkung auf die Reaktionszeit.
Das Signifikanzniveau wird auf \(\alpha\) = 0.05 festgelegt.
Vorbereitung des Datensatzes
Im folgenden ist der Datensatz zu sehen ohne Probanden, die den Ishihara-Test nicht bestanden haben.
Um die Reaktionen den zugehörigen Zeitpunkten zuordnen zu können und die Reaktionen gruppieren zu können, wird die Tabelle zunächst vom weiten Format ins lange Format gebracht. Dabei werden die Spalten von “Datum” - “Ishihara Dauer” entfernt, da Informationen wie demographische Daten nicht gebraucht werden, um die Unterschiede zwischen den Reaktionen zu untersuchen. Die Methode zur Umformung der Tabelle befindet sich in /scripts/wide_to_long.R Das Ergebnis sieht wie folgt aus:
Die Spalte “Time_ms” wird als Boxplot geplottet, um die Verteilung der Reaktionszeiten zu veranschaulichen.
Der Boxplot ist stark gestaucht, da die Reaktionszeiten von 99 ms bis 56860 ms reichen. Der Median liegt bei 2029 ms, weshalb davon auszugehen ist, dass es sich bei den Außen- und Fernpunkten um Ausreißer handelt, von denen einige auch extreme Ausreißer sind. Für weitere Analysen sollten diese aussortiert werden.
Die Werte des Boxplots nochmal als Tabelle:
Min. 1st Qu. Median Mean 3rd Qu. Max.
99 1643 2029 2351 2649 56860
Um die Ausreißer zu identifizieren, wird das rstatix Paket verwendet.
Fehler in identify_outliers(., Time_ms) :
konnte Funktion "identify_outliers" nicht finden
Sichtbar sind insgesamt 628 Ausreißer von 10000 Messpunkten.
Von den 628 Ausreißern sind 224 Ausreißer extrem.Die extremen Ausreißer werden aus dem Datensatz entfernt.
Sodass noch 9776 Messpunkte von 10000 verbleiben. Nun ist auch der Boxplot erkennbar.
Und die Reaktionszeiten befinden sich jetzt zwischen 99 ms und 6136 ms.
Min. 1st Qu. Median Mean 3rd Qu. Max.
99 1635 2009 2222 2587 6136
Nun kann mit den Hypothesentests begonnen werden.
Anova-Test für alle
Zunächst wird sich ein Überblick der Mittelwerte und Standardabweichungen der einzelnen Reaktionen verschafft.
Hierbei ist zu sehen, dass sich die Mittelwerte zwischen den Reaktionen um mehrere 100 ms voneinander unterscheiden. Auch die zugehörigen Boxplots zeigen dies an:
Die Mediane bewegen sich von 1559 ms (Reaktion 5) zu 2143 ms (Reaktion 2). Nun ist zu prüfen, ob diese Unterschiede signifikant sind. Dafür wird der ANOVA-Test (Analysis of Variance Test) herangezogen. Dieser untersucht, ob bei einer Reihe von Messwerten, die in 2 oder mehr Gruppen eingeteilt sind, die Mittelwerte der Gruppen signifikat voneinander unterscheiden, sodass eine Aussage darüber getroffen werden kann, ob die einzelnen Gruppen eine Auswirkung auf die Messwerte haben.
Vorbedingungen prüfen
Um den ANOVA-Test durchführen zu können, müssen 2 Bedingungen erfüllt sein. Zum einen müssen die Daten normalverteilt sein und zum anderen müssen sie eine Varianzhomogenität aufweisen. Zuerst wird die Normalverteilung der Reaktionszeiten geprüft.
Prüfung auf Normalverteilung
Die Prüfung auf Normalverteilung wird sowohl visuell, als auch statistisch durchgeführt. Zuerst wird der Quantil-Quantil-Plot (Q-Q-Plot) betrachtet.

Die Winkelhalbierende stellt dabei die Standardnormalverteilung dar. Die schwarzen Punkte sind die Verteilung des Datensatzes. Je näher die Punkte an der Standardnormalverteilung sind, desto wahrscheinlicher ist eine Normalverteilung beim Datensatz.
Wird jede Reaktion einzeln geplottet, so ist ersichtlich, dass Reaktionen wie z.B. 4 und 7 näher an der Standardnormalverteilung sind, als andere Reaktionen.

Um die Normalverteilung statistisch zu prüfen, wird der Shapiro-Wilk-Test durchgeführt. R meldet beim Durchführen des Shapiro-Wilk-Tests einen Fehler, wenn auf die Normalverteilung aller Messwerte getestet wird, da nur zwischen 3 und 5000 Werte auf Normalität geprüft werden können.
Fehler in shapiro.test(data) : sample size must be between 3 and 5000
Daher wird der Shapiro-Wilk-Test nur auf die einzelnen Reaktionen angewandt, da diese Anzahlen von unter 5000 besitzen.
Angewandt auf die einzelenen Reaktionen gibt der Test an, dass lediglich Reaktion 7 normalverteilt ist. Dies ist bei 100 Probanden allerdings unwahrscheinlich. Grund für dieses Ergebnis ist die Empfindlichkeit des Shapiro-Wilk-Tests bei schon kleinen Abweichungen. Auch ist zu beachten, dass die Gruppen 1, 2, 3 und 8 jeweils über 2000 Messwerte besitzen, während die anderen Gruppen jeweils unter 150 Messwerte besitzen.
Eine andere Methode die Normalverteilung visuell zu prüfen, ist anhand eines Histogrammes. Die Balken sollten dabei möglichst eine gaußsche Glockenkurve bilden. Im folgenden Histogramm ist annährend eine solche Kurve zu sehen. Allerdings ist sie etwas nach links verschoben und die Anzahl der Messwerte unter 1000 ms sind abrupt sehr gering.

Im nächsten Histogramm sind nun alle Ausreißer, die von der identify-outliers-Methode erkannt worden sind, entfernt worden. Die Werte unter 1000 ms sind augenscheinlich nicht als Ausreißer erkannt worden. Der niedrigste gemessene Wert liegt bei 99 ms, welche nicht als Ausreißer erkannt wurde. Eine so schnelle Reaktion ist allerdings nicht möglich, weshalb die Person in diesem Moment möglicherweise versehentlich zweimal hintereinander auf den Button gedrückt hat, ohne vorher mental zu entscheiden, ob die Aufgabe richtig oder falsch gelöst worden ist.

Shapiro-Test ohne Ausreißer pro Reaktion:
In diesem Histogramm sind nur Messwerte zwischen 500 ms und 4000 ms eingetragen.

Insgesamt kann davon ausgegangen werden, dass eine Normalverteilung vorliegt. Ein besseres Ergebnis könnte erzielt werden, wenn mehr Daten zur Verfügung stehen würden. Der Implementierungsfehler spielt auch eine Rolle bei der Verteilung der Daten. Es wird angenommen, dass die Bedingung auf Normalverteilung erfüllt ist. Im Notebook Kruskal_Wallis_Test.rmd wird der Kruskal-Wallis-Test durchgeführt, der ohne jegliche Vorbedingungen auskommt.
Prüfung auf Varianzhomogenität
Die Prüfung der Varianzhomogenität erfolgt durch den Levene-Test.
Da der p-Wert kleiner als 0,05 ist, sind die Unterschiede in den Varianzen signikant. Daher ist der Levene-Test fehlgeschlagen und die zweite Bedingung für den Anova-Test nicht erfüllt. Ein fehlgeschlagener Levene-Test kann darauf hindeuten, dass bei den Messungen ein Fehler unterlaufen ist. In diesem Experiment ist das durch den Implementierungsfehler tatsächlich der Fall.
Welch-Anova-Test
Zwar ist die Varianzhomogenität für den Anova-Test nicht gegeben, allerdings lässt sich trotzdem noch untersuchen, wie signifikant die Unterschiede zwischen den Reaktionen sind. Das ist mit dem Welch-Anova-Test möglich, welche nur eine Normalverteilung fordert und robost gegenüber Varianzheterogenität ist. Dadurch hat er allerdings weniger Aussagekraft als der Anova-Test.
Der p-Wert für den Welch-Anova-Test ist kleiner als 0,05 und daher ist davon auszugehen, dass die Unterschiede zwischen den Reaktionen signifikant sind. D.h. dass die Nullhypothese verworfen wird und die Gegenhypothese angenommen wird.
Post-hoc-Analyse
Da der Welch-Anova erfolgreich war, wird eine Posthoc-Analyse durchgeführt, um herauszufinden, wie signifikant die Unterschiede unter allen möglichen paarweisen Kombinationen von Reaktionen sind.
Wie in der Spalte “p.adj.signif” zu sehen ist, gibt es zwischen vielen Paaren signifikante Unterschiede. Je mehr Sterne dem Paar zugeordnert werden, desto höher ist die Signifikanz. “ns” dagegen bedeutet, dass der Unterschied zwischen dem Paar nicht signifikant ist.
Der paarweise Vergleich lässt sich auch visuell darstellen:

Die Linien über den Boxplots verbinden dabei die Reaktionen mit signifikanten Unterschieden. Die Sterne über den Linien zeigen auch die die Stärke der Signifkanz an.
Das Ergebnis des paarweisen Vergleichs ist überraschend, da dieser die Hypothese, dass inkongruente Reize längere Reaktionszeiten verursachen doch wieder in Frage stellen. So ist beispielsweise zu sehen, dass es einen starken signifikanten Unterschied zwischen Reaktion 1 und 8 gibt, obwohl es sich hier zweimal um kongruente Reize handelt. Das inkongruente Gegenstück zur 1 ist die Reaktion 3. Zwischen 1 und 3 gibt es einen Unterschied, hier trifft auch die Vermutung zu, da die Reaktion 3 eine höhere durchschnittliche Reaktionszeit aufweist als Reaktion 1.
Schlussfolgerung
Aufgrund der Ergebnisse kann sicher gesagt werden, dass die Farbe der Buttons auf jeden Fall eine Auswirkung auf die Reaktionszeit hat. Es ist jedoch nicht nachweisbar, dass dies an den inkongruenten Stimuli liegt.
Anova-Test für 100 richtige Antworten
Insgesamt 6 Probanden haben sowohl 100 Aufgaben richtig gelöst als auch den Ishihara-Test komplett bestanden. Da sie also keinen Fehler gemacht haben, können alle Reaktionen, die fälschlicherweise der 2 zugeordnert wurde (was eine falsche Reaktion auf eine Aufgabe ist) der 6 zugeordnet werden. Damit ist zwar ein kleiner, aber dafür korrekter Datensatz vorhanden, mit dem auch nochmal die Signifikanz zwischen den Reaktionen untersucht wird.
Die Daten der 6 Probanden werden auf diesselbe Weise vorbereitet, wie oben auch schon.
Damit sind 600 Messwerte vorhanden. Auch hier werden vor der Analyse die Ausreißer entfernt.
Insgesamt sind 32 Ausreißer vorhanden.
Aussortiert werden die 7 extremen Ausreißer.
Damit verbleiben noch 593 Messwerte.
Das zugehörige Boxplot zeigt die Verteilung der Messwerte an.
Die Tabelle zeigt die Ergebnisse wiederrum in Zahlen an.
Min. 1st Qu. Median Mean 3rd Qu. Max.
1171 1776 2206 2394 2784 5502
Auffällig ist, dass der Median um 197 ms höher liegt, als bei der Gesamtgruppe.
Auch bei den Mittelwerten sind höhere Reaktionszeiten zu sehen.
Min. 1st Qu. Median Mean 3rd Qu. Max.
1171 1776 2206 2394 2784 5502
Vorbedingungen prüfen
Prüfung auf Normalverteilung
Bei der visuellen Prüfung auf Normalverteilung mithilfe der Q-Q-Plots scheinen die Daten deutlich näher an der Standardnormalverteilung zu sein, als bei der Gruppe mit allen Probanden.

Dies wird noch deutlicher, wenn die Q-Q-Plots für die einzelnen Reaktionen betrachtet werden.

Da hier der Implementierungfehler im Nachhinein korrigiert werden konnte, scheint die Annahme, dass die Daten tatsächlich normalverteilt sind, richtig zu sein.
Der Shapiro-Test schlägt zwar auch hier wieder fehl, allerdings sind die p-Werte hier nicht ganz so klein wie für alle Probanden zusammen.
Prüfung auf Varianzhomogenität
Der Levene-Test ist erfolgreich, da p > 0,05 ist.
Anova-Test
Daher wird der Anova-Test durchgeführt.
Coefficient covariances computed by hccm()
ANOVA Table (type II tests)
Effect DFn DFd F p p<.05 ges
1 Reaction 3 589 4.248 0.006 * 0.021
Mit p < 0,05 ist der Anova-Test erfolgreich, daher bestehen signifikante Unterschiede zwischen den Gruppen.
Post-hoc-Analyse
Es folgt die Post-hoc Analyse, welche das Ergebnis von vorhin zum Teil bestätigen:

Es ist wieder ein signifikanter Unterschied zwischen den kongruenten Gruppen 1 und 8 gegeben. Diesmal ist auch ein signifikanter Unterschied zwischen den Gruppen 1 und 6 gegeben. Vermutet wurde allerdings, dass die signifikanten Unterschiede zwischen den Gruppen 1 und 3 bestehen würden sowie zwischen den Gruppen 6 und 8.
Schlussfolgerung
Dieses Ergebnis ist möglicherweise ein Hinweis darauf, dass der Aufbau des Experiments nicht geeignet ist, um herauszufinden, ob die Reaktionszeit durch inkongruenten Stimuli beeinflusst wird. Bei den Originalexperimenten von John Ridley Stroop wurden getrennte Experimente zu kongruenten und inkongruenten Reizen gemacht und dann die Durchschnittszeiten der Experimente miteinander verglichen. So sollten die Probanden zunächst das Farbwort in schwarzer Schrift vorlesen. Anschließend sollten die Probanden/Probandinnen die Farbe in der das Wort geschrieben ist, anstelle des Worts, vorlesen. Diese Wörter sind inkongruent (z.B. Grün in roter Schrift geschrieben). Zum Schluss wurden farbige Quadrate präsentiert, wobei die Farbe genannt werden sollte.
Ein ähnliches Vorgehen könnte auch für zukünftige Experimente gewählt werden. Die Buttons würden dann im ersten Durchlauf beide diesselbe Farbe besitzen. Im zweiten Durchlauf würden die Buttons immer kongruente Farben zu den Buttontiteln besitzen. Im dritten Durchlauf immer inkongruente Farben zu den Buttontiteln. In einem vierten Durchlauf könnte in den Buttons nichts drin stehen und sie hätten lediglich eine rote bzw. grüne Hintergrundfarbe und die Probanden sollen bei einer richtigen Aufgabe auf den grünen und bei einer falschen Aufgabe auf den roten Button drücken. Danach könnten die Ergebnisse der einzelenen Experimente miteinander verglichen werden und auf signifikante Unterschiede untersucht werden.
LS0tDQp0aXRsZTogIkF1c3dpcmt1bmdlbiBkZXMgU3Ryb29wLUVmZmVrdHMgYXVmIG1vYmlsZSBCZW51dHplcm9iZXJmbMOkY2hlbiINCnN1YnRpdGxlOiAiQW5hbHlzZSBUZWlsIDIgLSBTY2hsaWXDn2VuZGUgU3RhdGlzdGlrIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCi0tLQ0KDQojIEVpbmxlaXR1bmcNCg0KSW0gZXJzdGVuIFRlaWwgZGVyIEFuYWx5c2Uga29ubnRlIGVpbmUgw5xiZXJzaWNodCDDvGJlciBkZW4gRGF0ZW5zYXR6IGdld29ubmVuIHdlcmRlbi4gSW0gendlaXRlbiBUZWlsIHdpcmQgbnVuIHVudGVyc3VjaHQsIG9iIGlua29uZ3J1ZW50ZSBSZWl6ZSBkaWUgUmVha3Rpb25zemVpdCBzaWduaWZpa2FudCBiZWVpbmZsdXNzZW4uIEhpZXJ6dSB3ZXJkZW4gSHlwb3RoZXNlbnRlc3QgZ2VudXR6dC4NCg0KRGllIE51bGwtIHVuZCBHZWdlbmh5cG90aGVzZSBsYXV0ZW46IA0KDQoqKkg8c3ViPjA8L3N1Yj46IERpZSBpbmtvbmdydWVudGUgRsOkcmJ1bmcgZGVyIEJ1dHRvbnMgaGF0IGtlaW5lIEF1c3dpcmt1bmcgYXVmIGRpZSBSZWFrdGlvbnN6ZWl0LioqDQoNCioqSDxzdWI+MTwvc3ViPjogRGllIGlua29uZ3J1ZW50ZSBGw6RyYnVuZyBkZXIgQnV0dG9ucyBoYXQgZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUmVha3Rpb25zemVpdC4qKg0KDQpEYXMgU2lnbmlmaWthbnpuaXZlYXUgd2lyZCBhdWYgKiokXGFscGhhJCA9IDAuMDUqKiBmZXN0Z2VsZWd0Lg0KDQpgYGB7ciBzZXR1cH0NCnNvdXJjZSgic2NyaXB0cy93aWRlX3RvX2xvbmcuUiIpDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YV9vcmlnaW5hbCA8LSByZWFkX2NzdigiZGF0YS9kYXRhX29yaWdpbmFsLmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHMoRGF0dW0gPSBjb2xfZGF0ZShmb3JtYXQgPSAiJWQuJW0uJVkiKSwgDQogICAgICAgIFVocnplaXQgPSBjb2xfdGltZShmb3JtYXQgPSAiJUg6JU0iKSwgDQogICAgICAgIGBaZWl0IGdlc2FtdGAgPSBjb2xfdGltZShmb3JtYXQgPSAiJUg6JU06JU9TIiksIA0KICAgICAgICBgSXNoaWhhcmEgRGF1ZXJgID0gY29sX3RpbWUoZm9ybWF0ID0gIiVIOiVNOiVTIikpKQ0KYGBgDQoNCmBgYHtyfQ0KIyBSZW1vdmUgdHJvbGwNCmRhdGFfb3JpZ2luYWwgPC0gZGF0YV9vcmlnaW5hbFstYygxMDcpLCBdDQpgYGANCg0KYGBge3J9DQojIFJlbW92ZSBhbGwgd2l0aCByZWQtZ3JlZW4tYmxpbmRuZXNzDQpkYXRhX29yaWdpbmFsJGBJc2hpaGFyYSBEYXVlcmAgPC0gZm9ybWF0KGFzLlBPU0lYY3QoZGF0YV9vcmlnaW5hbCQnSXNoaWhhcmEgRGF1ZXInKSwgIiVIOiVNOiVPUyIpDQoNCmRmX25vQ0IgPC0gc3Vic2V0KGRhdGFfb3JpZ2luYWwsIGRhdGFfb3JpZ2luYWwkYElzaGloYXJhIDQyYCA9PSA0MiAmIGRhdGFfb3JpZ2luYWwkYElzaGloYXJhIDNgID09IDMgJiBkYXRhX29yaWdpbmFsJGBJc2hpaGFyYSBMaW5pZW5gID09ICJrZWluZSIgJiBkYXRhX29yaWdpbmFsJGBJc2hpaGFyYSBEYXVlcmAgPCAiMDA6MDI6MDAiKQ0KYGBgDQojIFZvcmJlcmVpdHVuZyBkZXMgRGF0ZW5zYXR6ZXMNCkltIGZvbGdlbmRlbiBpc3QgZGVyIERhdGVuc2F0eiB6dSBzZWhlbiBvaG5lIFByb2JhbmRlbiwgZGllIGRlbiBJc2hpaGFyYS1UZXN0IG5pY2h0IGJlc3RhbmRlbiBoYWJlbi4gDQpgYGB7cn0NCmhlYWQoZGZfbm9DQikNCmBgYA0KVW0gZGllIFJlYWt0aW9uZW4gZGVuIHp1Z2Vow7ZyaWdlbiBaZWl0cHVua3RlbiB6dW9yZG5lbiB6dSBrw7ZubmVuIHVuZCBkaWUgUmVha3Rpb25lbiBncnVwcGllcmVuIHp1IGvDtm5uZW4sIHdpcmQgZGllIFRhYmVsbGUgenVuw6RjaHN0IHZvbSB3ZWl0ZW4gRm9ybWF0IGlucyBsYW5nZSBGb3JtYXQgZ2VicmFjaHQuIERhYmVpIHdlcmRlbiBkaWUgU3BhbHRlbiB2b24gIkRhdHVtIiAtICJJc2hpaGFyYSBEYXVlciIgZW50ZmVybnQsIGRhIEluZm9ybWF0aW9uZW4gd2llIGRlbW9ncmFwaGlzY2hlIERhdGVuIG5pY2h0IGdlYnJhdWNodCB3ZXJkZW4sIHVtIGRpZSBVbnRlcnNjaGllZGUgendpc2NoZW4gZGVuIFJlYWt0aW9uZW4genUgdW50ZXJzdWNoZW4uIERpZSBNZXRob2RlIHp1ciBVbWZvcm11bmcgZGVyIFRhYmVsbGUgYmVmaW5kZXQgc2ljaCBpbiAqL3NjcmlwdHMvd2lkZV90b19sb25nLlIqIERhcyBFcmdlYm5pcyBzaWVodCB3aWUgZm9sZ3QgYXVzOg0KYGBge3J9DQpkZl9sb25nX3JlYWN0aW9ucyA8LSBkZl9ub0NCICU+JSBzZWxlY3QoLSgiRGF0dW0iOiJJc2hpaGFyYSBEYXVlciIpKQ0KZGZfbG9uZ19yZWFjdGlvbnMgPC0gd2lkZVRvTG9uZ1RhYmxlKGRmX2xvbmdfcmVhY3Rpb25zKQ0KZGZfbG9uZ19yZWFjdGlvbnMkUmVhY3Rpb24gPC0gYXMuZmFjdG9yKGRmX2xvbmdfcmVhY3Rpb25zJFJlYWN0aW9uKQ0KbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnMpW25hbWVzKGRmX2xvbmdfcmVhY3Rpb25zKSA9PSAiVGltZSBpbiBtcyJdIDwtICJUaW1lX21zIg0KZGZfbG9uZ19yZWFjdGlvbnMNCmBgYA0KRGllIFNwYWx0ZSAiVGltZV9tcyIgd2lyZCBhbHMgQm94cGxvdCBnZXBsb3R0ZXQsIHVtIGRpZSBWZXJ0ZWlsdW5nIGRlciBSZWFrdGlvbnN6ZWl0ZW4genUgdmVyYW5zY2hhdWxpY2hlbi4NCg0KYGBge3J9DQpmaWcgPC0gcGxvdF9seSh0eXBlID0gImJveCIpDQpmaWcgPC0gZmlnICU+JSBhZGRfdHJhY2UoeSA9IGRmX2xvbmdfcmVhY3Rpb25zJGBUaW1lX21zYCwgbmFtZSA9ICJhbGxlIFJlYWt0aW9uZW4iKQ0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHRpdGxlPSJWZXJ0ZWlsdW5nIGRlciBSZWFrdGlvbnN6ZWl0ZW4iLCBzaG93bGVnZW5kID0gRkFMU0UpDQpmaWcNCmBgYA0KRGVyIEJveHBsb3QgaXN0IHN0YXJrIGdlc3RhdWNodCwgZGEgZGllIFJlYWt0aW9uc3plaXRlbiB2b24gOTkgbXMgYmlzIDU2ODYwIG1zIHJlaWNoZW4uIERlciBNZWRpYW4gbGllZ3QgYmVpIDIwMjkgbXMsIHdlc2hhbGIgZGF2b24gYXVzenVnZWhlbiBpc3QsIGRhc3MgZXMgc2ljaCBiZWkgZGVuIEF1w59lbi0gdW5kIEZlcm5wdW5rdGVuIHVtIEF1c3JlacOfZXIgaGFuZGVsdCwgdm9uIGRlbmVuIGVpbmlnZSBhdWNoIGV4dHJlbWUgQXVzcmVpw59lciBzaW5kLiBGw7xyIHdlaXRlcmUgQW5hbHlzZW4gc29sbHRlbiBkaWVzZSBhdXNzb3J0aWVydCB3ZXJkZW4uDQoNCkRpZSBXZXJ0ZSBkZXMgQm94cGxvdHMgbm9jaG1hbCBhbHMgVGFiZWxsZToNCmBgYHtyfQ0Kc3VtbWFyeShkZl9sb25nX3JlYWN0aW9ucyRgVGltZV9tc2ApDQpgYGANClVtIGRpZSBBdXNyZWnDn2VyIHp1IGlkZW50aWZpemllcmVuLCB3aXJkIGRhcyByc3RhdGl4IFBha2V0IHZlcndlbmRldC4gDQpgYGB7cn0NCm91dGxpZXJzIDwtIGRmX2xvbmdfcmVhY3Rpb25zICU+JQ0KICBncm91cF9ieShSZWFjdGlvbikgJT4lDQogIGlkZW50aWZ5X291dGxpZXJzKFRpbWVfbXMpDQpvdXRsaWVycw0KYGBgDQpTaWNodGJhciBzaW5kIGluc2dlc2FtdCA2MjggQXVzcmVpw59lciB2b24gMTAwMDAgTWVzc3B1bmt0ZW4uDQoNCmBgYHtyfQ0KZGZfZXh0cmVtZV9vdXRsaWVycyA8LSBzdWJzZXQob3V0bGllcnMsIG91dGxpZXJzJGlzLmV4dHJlbWUgPT0gVFJVRSkNCmRmX2V4dHJlbWVfb3V0bGllcnMNCmBgYA0KVm9uIGRlbiA2MjggQXVzcmVpw59lcm4gc2luZCAyMjQgQXVzcmVpw59lciBleHRyZW0uRGllIGV4dHJlbWVuIEF1c3JlacOfZXIgd2VyZGVuIGF1cyBkZW0gRGF0ZW5zYXR6IGVudGZlcm50Lg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSA8LSBkZl9sb25nX3JlYWN0aW9ucyAlPiUgYW50aV9qb2luKGRmX2V4dHJlbWVfb3V0bGllcnMsIGJ5ID0gYygiWiIsICJUaW1lX21zIiwgIlIiLCAiUmVhY3Rpb24iKSkNCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZQ0KYGBgDQpTb2Rhc3Mgbm9jaCA5Nzc2IE1lc3NwdW5rdGUgdm9uIDEwMDAwIHZlcmJsZWliZW4uIE51biBpc3QgYXVjaCBkZXIgQm94cGxvdCBlcmtlbm5iYXIuDQoNCmBgYHtyfQ0KZmlnIDwtIHBsb3RfbHkodHlwZSA9ICJib3giKQ0KZmlnIDwtIGZpZyAlPiUgYWRkX3RyYWNlKHkgPSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUkYFRpbWVfbXNgLCBuYW1lID0gImFsbGUgUmVha3Rpb25lbiIpDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQodGl0bGU9IlZlcnRlaWx1bmcgZGVyIFJlYWt0aW9uc3plaXRlbiIsIHNob3dsZWdlbmQgPSBGQUxTRSkNCmZpZw0KYGBgDQpVbmQgZGllIFJlYWt0aW9uc3plaXRlbiBiZWZpbmRlbiBzaWNoIGpldHp0IHp3aXNjaGVuIDk5IG1zIHVuZCA2MTM2IG1zLiANCg0KYGBge3J9DQpzdW1tYXJ5KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSRgVGltZV9tc2ApDQpgYGANCk51biBrYW5uIG1pdCBkZW4gSHlwb3RoZXNlbnRlc3RzIGJlZ29ubmVuIHdlcmRlbi4NCg0KIyBBbm92YS1UZXN0IGbDvHIgYWxsZQ0KDQpadW7DpGNoc3Qgd2lyZCBzaWNoIGVpbiDDnGJlcmJsaWNrIGRlciBNaXR0ZWx3ZXJ0ZSB1bmQgU3RhbmRhcmRhYndlaWNodW5nZW4gZGVyIGVpbnplbG5lbiBSZWFrdGlvbmVuIHZlcnNjaGFmZnQuDQoNCmBgYHtyfQ0KYWdnMSA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgZ2V0X3N1bW1hcnlfc3RhdHMoVGltZV9tcywgdHlwZSA9ICJtZWFuX3NkIikNCg0KYWdnMQ0KYGBgDQpIaWVyYmVpIGlzdCB6dSBzZWhlbiwgZGFzcyBzaWNoIGRpZSBNaXR0ZWx3ZXJ0ZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiB1bSBtZWhyZXJlIDEwMCBtcyB2b25laW5hbmRlciB1bnRlcnNjaGVpZGVuLiBBdWNoIGRpZSB6dWdlaMO2cmlnZW4gQm94cGxvdHMgemVpZ2VuIGRpZXMgYW46DQoNCmBgYHtyfQ0KZmlnIDwtIHBsb3RfbHkoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lLCB4ID0gflJlYWN0aW9uLCB5ID0gflRpbWVfbXMsIHR5cGU9ImJveCIsIGNvbG9yID0gflJlYWN0aW9uKQ0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlJlYWt0aW9uIiksIHlheGlzID0gbGlzdCh0aXRsZSA9ICJaZWl0IGluIG1zIikpDQpmaWcNCmBgYA0KRGllIE1lZGlhbmUgYmV3ZWdlbiBzaWNoIHZvbiAxNTU5IG1zIChSZWFrdGlvbiA1KSB6dSAyMTQzIG1zIChSZWFrdGlvbiAyKS4gTnVuIGlzdCB6dSBwcsO8ZmVuLCBvYiBkaWVzZSBVbnRlcnNjaGllZGUgc2lnbmlmaWthbnQgc2luZC4gRGFmw7xyIHdpcmQgZGVyIEFOT1ZBLVRlc3QgKEFuYWx5c2lzIG9mIFZhcmlhbmNlIFRlc3QpIGhlcmFuZ2V6b2dlbi4gRGllc2VyIHVudGVyc3VjaHQsIG9iIGJlaSBlaW5lciBSZWloZSB2b24gTWVzc3dlcnRlbiwgZGllIGluIDIgb2RlciBtZWhyIEdydXBwZW4gZWluZ2V0ZWlsdCBzaW5kLCBkaWUgTWl0dGVsd2VydGUgZGVyIEdydXBwZW4gc2lnbmlmaWthdCB2b25laW5hbmRlciB1bnRlcnNjaGVpZGVuLCBzb2Rhc3MgZWluZSBBdXNzYWdlIGRhcsO8YmVyIGdldHJvZmZlbiB3ZXJkZW4ga2Fubiwgb2IgZGllIGVpbnplbG5lbiBHcnVwcGVuIGVpbmUgQXVzd2lya3VuZyBhdWYgZGllIE1lc3N3ZXJ0ZSBoYWJlbi4NCg0KIyMgVm9yYmVkaW5ndW5nZW4gcHLDvGZlbg0KDQpVbSBkZW4gQU5PVkEtVGVzdCBkdXJjaGbDvGhyZW4genUga8O2bm5lbiwgbcO8c3NlbiAyIEJlZGluZ3VuZ2VuIGVyZsO8bGx0IHNlaW4uIFp1bSBlaW5lbiBtw7xzc2VuIGRpZSBEYXRlbiBub3JtYWx2ZXJ0ZWlsdCBzZWluIHVuZCB6dW0gYW5kZXJlbiBtw7xzc2VuIHNpZSBlaW5lIFZhcmlhbnpob21vZ2VuaXTDpHQgYXVmd2Vpc2VuLiBadWVyc3Qgd2lyZCBkaWUgTm9ybWFsdmVydGVpbHVuZyBkZXIgUmVha3Rpb25zemVpdGVuIGdlcHLDvGZ0Lg0KDQojIyMgUHLDvGZ1bmcgYXVmIE5vcm1hbHZlcnRlaWx1bmcNCg0KRGllIFByw7xmdW5nIGF1ZiBOb3JtYWx2ZXJ0ZWlsdW5nIHdpcmQgc293b2hsIHZpc3VlbGwsIGFscyBhdWNoIHN0YXRpc3Rpc2NoIGR1cmNoZ2Vmw7xocnQuIFp1ZXJzdCB3aXJkIGRlciBRdWFudGlsLVF1YW50aWwtUGxvdCAoUS1RLVBsb3QpIGJldHJhY2h0ZXQuDQpgYGB7cn0NCm1vZGVsIDwtIGxtKFRpbWVfbXMgfiBSZWFjdGlvbiwgZGF0YSA9IGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSkNCmdncXFwbG90KHJlc2lkdWFscyhtb2RlbCkpDQpgYGANCkRpZSBXaW5rZWxoYWxiaWVyZW5kZSBzdGVsbHQgZGFiZWkgZGllIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZyBkYXIuIERpZSBzY2h3YXJ6ZW4gUHVua3RlIHNpbmQgZGllIFZlcnRlaWx1bmcgZGVzIERhdGVuc2F0emVzLiBKZSBuw6RoZXIgZGllIFB1bmt0ZSBhbiBkZXIgU3RhbmRhcmRub3JtYWx2ZXJ0ZWlsdW5nIHNpbmQsIGRlc3RvIHdhaHJzY2hlaW5saWNoZXIgaXN0IGVpbmUgTm9ybWFsdmVydGVpbHVuZyBiZWltIERhdGVuc2F0ei4NCg0KV2lyZCBqZWRlIFJlYWt0aW9uIGVpbnplbG4gZ2VwbG90dGV0LCBzbyBpc3QgZXJzaWNodGxpY2gsIGRhc3MgUmVha3Rpb25lbiB3aWUgei5CLiA0IHVuZCA3IG7DpGhlciBhbiBkZXIgU3RhbmRhcmRub3JtYWx2ZXJ0ZWlsdW5nIHNpbmQsIGFscyBhbmRlcmUgUmVha3Rpb25lbi4NCg0KYGBge3J9DQpnZ3FxcGxvdChkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUsICJUaW1lX21zIiwgZmFjZXQuYnkgPSAiUmVhY3Rpb24iKQ0KYGBgDQpVbSBkaWUgTm9ybWFsdmVydGVpbHVuZyBzdGF0aXN0aXNjaCB6dSBwcsO8ZmVuLCB3aXJkIGRlciBTaGFwaXJvLVdpbGstVGVzdCBkdXJjaGdlZsO8aHJ0LiBSIG1lbGRldCBiZWltIER1cmNoZsO8aHJlbiBkZXMgU2hhcGlyby1XaWxrLVRlc3RzIGVpbmVuIEZlaGxlciwgd2VubiBhdWYgZGllIE5vcm1hbHZlcnRlaWx1bmcgYWxsZXIgTWVzc3dlcnRlIGdldGVzdGV0IHdpcmQsIGRhIG51ciB6d2lzY2hlbiAzIHVuZCA1MDAwIFdlcnRlIGF1ZiBOb3JtYWxpdMOkdCBnZXByw7xmdCB3ZXJkZW4ga8O2bm5lbi4NCg0KYGBge3J9DQpzaGFwaXJvX3Rlc3QocmVzaWR1YWxzKG1vZGVsKSkNCmBgYA0KRGFoZXIgd2lyZCBkZXIgU2hhcGlyby1XaWxrLVRlc3QgbnVyIGF1ZiBkaWUgZWluemVsbmVuIFJlYWt0aW9uZW4gYW5nZXdhbmR0LCBkYSBkaWVzZSBBbnphaGxlbiB2b24gdW50ZXIgNTAwMCBiZXNpdHplbi4NCg0KYGBge3J9DQpkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgc2hhcGlyb190ZXN0KFRpbWVfbXMpDQpgYGANCkFuZ2V3YW5kdCBhdWYgZGllIGVpbnplbGVuZW4gUmVha3Rpb25lbiBnaWJ0IGRlciBUZXN0IGFuLCBkYXNzIGxlZGlnbGljaCBSZWFrdGlvbiA3IG5vcm1hbHZlcnRlaWx0IGlzdC4gRGllcyBpc3QgYmVpIDEwMCBQcm9iYW5kZW4gYWxsZXJkaW5ncyB1bndhaHJzY2hlaW5saWNoLiBHcnVuZCBmw7xyIGRpZXNlcyBFcmdlYm5pcyBpc3QgZGllIEVtcGZpbmRsaWNoa2VpdCBkZXMgU2hhcGlyby1XaWxrLVRlc3RzIGJlaSBzY2hvbiBrbGVpbmVuIEFid2VpY2h1bmdlbi4gQXVjaCBpc3QgenUgYmVhY2h0ZW4sIGRhc3MgZGllIEdydXBwZW4gMSwgMiwgMyB1bmQgOCBqZXdlaWxzIMO8YmVyIDIwMDAgTWVzc3dlcnRlIGJlc2l0emVuLCB3w6RocmVuZCBkaWUgYW5kZXJlbiBHcnVwcGVuIGpld2VpbHMgdW50ZXIgMTUwIE1lc3N3ZXJ0ZSBiZXNpdHplbi4NCg0KRWluZSBhbmRlcmUgTWV0aG9kZSBkaWUgTm9ybWFsdmVydGVpbHVuZyB2aXN1ZWxsIHp1IHByw7xmZW4sIGlzdCBhbmhhbmQgZWluZXMgSGlzdG9ncmFtbWVzLiBEaWUgQmFsa2VuIHNvbGx0ZW4gZGFiZWkgbcO2Z2xpY2hzdCBlaW5lIGdhdcOfc2NoZSBHbG9ja2Vua3VydmUgYmlsZGVuLiBJbSBmb2xnZW5kZW4gSGlzdG9ncmFtbSBpc3QgYW5uw6RocmVuZCBlaW5lIHNvbGNoZSBLdXJ2ZSB6dSBzZWhlbi4gQWxsZXJkaW5ncyBpc3Qgc2llIGV0d2FzIG5hY2ggbGlua3MgdmVyc2Nob2JlbiB1bmQgZGllIEFuemFobCBkZXIgTWVzc3dlcnRlIHVudGVyIDEwMDAgbXMgc2luZCBhYnJ1cHQgc2VociBnZXJpbmcuDQpgYGB7cn0NCmhpc3QoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lJFRpbWVfbXMpDQpgYGANCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9PdXRsaWVycyA8LSBkZl9sb25nX3JlYWN0aW9ucyAlPiUgYW50aV9qb2luKG91dGxpZXJzLCBieSA9IGMoIloiLCAiVGltZV9tcyIsICJSIiwgIlJlYWN0aW9uIikpDQpgYGANCkltIG7DpGNoc3RlbiBIaXN0b2dyYW1tIHNpbmQgbnVuIGFsbGUgQXVzcmVpw59lciwgZGllIHZvbiBkZXIgaWRlbnRpZnktb3V0bGllcnMtTWV0aG9kZSBlcmthbm50IHdvcmRlbiBzaW5kLCBlbnRmZXJudCB3b3JkZW4uIERpZSBXZXJ0ZSB1bnRlciAxMDAwIG1zIHNpbmQgYXVnZW5zY2hlaW5saWNoIG5pY2h0IGFscyBBdXNyZWnDn2VyIGVya2FubnQgd29yZGVuLiBEZXIgbmllZHJpZ3N0ZSBnZW1lc3NlbmUgV2VydCBsaWVndCBiZWkgOTkgbXMsIHdlbGNoZSBuaWNodCBhbHMgQXVzcmVpw59lciBlcmthbm50IHd1cmRlLiBFaW5lIHNvIHNjaG5lbGxlIFJlYWt0aW9uIGlzdCBhbGxlcmRpbmdzIG5pY2h0IG3DtmdsaWNoLCB3ZXNoYWxiIGRpZSBQZXJzb24gaW4gZGllc2VtIE1vbWVudCBtw7ZnbGljaGVyd2Vpc2UgdmVyc2VoZW50bGljaCB6d2VpbWFsIGhpbnRlcmVpbmFuZGVyIGF1ZiBkZW4gQnV0dG9uIGdlZHLDvGNrdCBoYXQsIG9obmUgdm9yaGVyIG1lbnRhbCB6dSBlbnRzY2hlaWRlbiwgb2IgZGllIEF1ZmdhYmUgcmljaHRpZyBvZGVyIGZhbHNjaCBnZWzDtnN0IHdvcmRlbiBpc3QuDQoNCmBgYHtyfQ0KaGlzdChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzJFRpbWVfbXMpDQpgYGANClNoYXBpcm8tVGVzdCBvaG5lIEF1c3JlacOfZXIgcHJvIFJlYWt0aW9uOg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnMgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgc2hhcGlyb190ZXN0KFRpbWVfbXMpDQpgYGANCg0KSW4gZGllc2VtIEhpc3RvZ3JhbW0gc2luZCBudXIgTWVzc3dlcnRlIHp3aXNjaGVuIDUwMCBtcyB1bmQgNDAwMCBtcyBlaW5nZXRyYWdlbi4gDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9PdXRsaWVyc18yIDwtIHN1YnNldChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzLCBkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzJFRpbWVfbXMgPj0gNTAwKQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9PdXRsaWVyc18yIDwtIHN1YnNldChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzXzIsIGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnNfMiRUaW1lX21zIDw9IDQwMDApDQpgYGANCg0KYGBge3J9DQpoaXN0KGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnNfMiRUaW1lX21zKQ0KYGBgDQpJbnNnZXNhbXQga2FubiBkYXZvbiBhdXNnZWdhbmdlbiB3ZXJkZW4sIGRhc3MgZWluZSBOb3JtYWx2ZXJ0ZWlsdW5nIHZvcmxpZWd0LiBFaW4gYmVzc2VyZXMgRXJnZWJuaXMga8O2bm50ZSBlcnppZWx0IHdlcmRlbiwgd2VubiBtZWhyIERhdGVuIHp1ciBWZXJmw7xndW5nIHN0ZWhlbiB3w7xyZGVuLiBEZXIgSW1wbGVtZW50aWVydW5nc2ZlaGxlciBzcGllbHQgYXVjaCBlaW5lIFJvbGxlIGJlaSBkZXIgVmVydGVpbHVuZyBkZXIgRGF0ZW4uIEVzIHdpcmQgYW5nZW5vbW1lbiwgZGFzcyBkaWUgQmVkaW5ndW5nIGF1ZiBOb3JtYWx2ZXJ0ZWlsdW5nIGVyZsO8bGx0IGlzdC4gSW0gTm90ZWJvb2sgS3J1c2thbF9XYWxsaXNfVGVzdC5ybWQgd2lyZCBkZXIgS3J1c2thbC1XYWxsaXMtVGVzdCBkdXJjaGdlZsO8aHJ0LCBkZXIgb2huZSBqZWdsaWNoZSBWb3JiZWRpbmd1bmdlbiBhdXNrb21tdC4NCg0KIyMjIFByw7xmdW5nIGF1ZiBWYXJpYW56aG9tb2dlbml0w6R0DQoNCkRpZSBQcsO8ZnVuZyBkZXIgVmFyaWFuemhvbW9nZW5pdMOkdCBlcmZvbGd0IGR1cmNoIGRlbiBMZXZlbmUtVGVzdC4NCg0KYGBge3J9DQpkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lIGxldmVuZV90ZXN0KFRpbWVfbXMgfiBSZWFjdGlvbikNCmBgYA0KRGEgZGVyIHAtV2VydCBrbGVpbmVyIGFscyAwLDA1IGlzdCwgc2luZCBkaWUgVW50ZXJzY2hpZWRlIGluIGRlbiBWYXJpYW56ZW4gc2lnbmlrYW50LiBEYWhlciBpc3QgZGVyIExldmVuZS1UZXN0IGZlaGxnZXNjaGxhZ2VuIHVuZCBkaWUgendlaXRlIEJlZGluZ3VuZyBmw7xyIGRlbiBBbm92YS1UZXN0IG5pY2h0IGVyZsO8bGx0LiBFaW4gZmVobGdlc2NobGFnZW5lciBMZXZlbmUtVGVzdCBrYW5uIGRhcmF1ZiBoaW5kZXV0ZW4sIGRhc3MgYmVpIGRlbiBNZXNzdW5nZW4gZWluIEZlaGxlciB1bnRlcmxhdWZlbiBpc3QuIEluIGRpZXNlbSBFeHBlcmltZW50IGlzdCBkYXMgZHVyY2ggZGVuIEltcGxlbWVudGllcnVuZ3NmZWhsZXIgdGF0c8OkY2hsaWNoIGRlciBGYWxsLg0KDQojIyBXZWxjaC1Bbm92YS1UZXN0DQoNClp3YXIgaXN0IGRpZSBWYXJpYW56aG9tb2dlbml0w6R0IGbDvHIgZGVuIEFub3ZhLVRlc3QgbmljaHQgZ2VnZWJlbiwgYWxsZXJkaW5ncyBsw6Rzc3Qgc2ljaCB0cm90emRlbSBub2NoIHVudGVyc3VjaGVuLCB3aWUgc2lnbmlmaWthbnQgZGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiBzaW5kLiBEYXMgaXN0IG1pdCBkZW0gV2VsY2gtQW5vdmEtVGVzdCBtw7ZnbGljaCwgd2VsY2hlIG51ciBlaW5lIE5vcm1hbHZlcnRlaWx1bmcgZm9yZGVydCB1bmQgcm9ib3N0IGdlZ2Vuw7xiZXIgVmFyaWFuemhldGVyb2dlbml0w6R0IGlzdC4gRGFkdXJjaCBoYXQgZXIgYWxsZXJkaW5ncyB3ZW5pZ2VyIEF1c3NhZ2VrcmFmdCBhbHMgZGVyIEFub3ZhLVRlc3QuDQoNCmBgYHtyfQ0KcmVzX2FvdiA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lIHdlbGNoX2Fub3ZhX3Rlc3QoVGltZV9tcyB+IFJlYWN0aW9uKQ0KcmVzX2Fvdg0KYGBgDQoNCkRlciBwLVdlcnQgZsO8ciBkZW4gV2VsY2gtQW5vdmEtVGVzdCBpc3Qga2xlaW5lciBhbHMgMCwwNSB1bmQgZGFoZXIgaXN0IGRhdm9uIGF1c3p1Z2VoZW4sIGRhc3MgZGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiBzaWduaWZpa2FudCBzaW5kLiBELmguIGRhc3MgZGllIE51bGxoeXBvdGhlc2UgdmVyd29yZmVuIHdpcmQgdW5kIGRpZSBHZWdlbmh5cG90aGVzZSBhbmdlbm9tbWVuIHdpcmQuDQoNCiMjIFBvc3QtaG9jLUFuYWx5c2UNCg0KRGEgZGVyIFdlbGNoLUFub3ZhIGVyZm9sZ3JlaWNoIHdhciwgd2lyZCBlaW5lIFBvc3Rob2MtQW5hbHlzZSBkdXJjaGdlZsO8aHJ0LCB1bSBoZXJhdXN6dWZpbmRlbiwgd2llIHNpZ25pZmlrYW50IGRpZSBVbnRlcnNjaGllZGUgdW50ZXIgYWxsZW4gbcO2Z2xpY2hlbiBwYWFyd2Vpc2VuIEtvbWJpbmF0aW9uZW4gdm9uIFJlYWt0aW9uZW4gc2luZC4NCg0KYGBge3J9DQpwd2MgPC0gZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lICU+JSBnYW1lc19ob3dlbGxfdGVzdChUaW1lX21zIH4gUmVhY3Rpb24pDQpwd2MNCmBgYA0KV2llIGluIGRlciBTcGFsdGUgInAuYWRqLnNpZ25pZiIgenUgc2VoZW4gaXN0LCBnaWJ0IGVzIHp3aXNjaGVuIHZpZWxlbiBQYWFyZW4gc2lnbmlmaWthbnRlIFVudGVyc2NoaWVkZS4gSmUgbWVociBTdGVybmUgZGVtIFBhYXIgenVnZW9yZG5lcnQgd2VyZGVuLCBkZXN0byBow7ZoZXIgaXN0IGRpZSBTaWduaWZpa2Fuei4gIm5zIiBkYWdlZ2VuIGJlZGV1dGV0LCBkYXNzIGRlciBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW0gUGFhciBuaWNodCBzaWduaWZpa2FudCBpc3QuDQoNCkRlciBwYWFyd2Vpc2UgVmVyZ2xlaWNoIGzDpHNzdCBzaWNoIGF1Y2ggdmlzdWVsbCBkYXJzdGVsbGVuOg0KDQpgYGB7cn0NCnB3Y19wbG90IDwtIHB3YyAlPiUgYWRkX3h5X3Bvc2l0aW9uKHggPSAiUmVhY3Rpb24iLCBzdGVwLmluY3JlYXNlID0gMSkNCmdnYm94cGxvdChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzLCB4ID0gIlJlYWN0aW9uIiwgeSA9ICJUaW1lX21zIikgKw0KICBzdGF0X3B2YWx1ZV9tYW51YWwocHdjX3Bsb3QsIGhpZGUubnMgPSBUUlVFKSArDQogIGxhYnMoDQogICAgc3VidGl0bGUgPSBnZXRfdGVzdF9sYWJlbChyZXNfYW92KSwNCiAgICBjYXB0aW9uID0gZ2V0X3B3Y19sYWJlbChwd2MpDQogICAgKQ0KYGBgDQpEaWUgTGluaWVuIMO8YmVyIGRlbiBCb3hwbG90cyB2ZXJiaW5kZW4gZGFiZWkgZGllIFJlYWt0aW9uZW4gbWl0IHNpZ25pZmlrYW50ZW4gVW50ZXJzY2hpZWRlbi4gRGllIFN0ZXJuZSDDvGJlciBkZW4gTGluaWVuIHplaWdlbiBhdWNoIGRpZSBkaWUgU3TDpHJrZSBkZXIgU2lnbmlma2FueiBhbi4NCg0KRGFzIEVyZ2VibmlzIGRlcyBwYWFyd2Vpc2VuIFZlcmdsZWljaHMgaXN0IMO8YmVycmFzY2hlbmQsIGRhIGRpZXNlciBkaWUgSHlwb3RoZXNlLCBkYXNzIGlua29uZ3J1ZW50ZSBSZWl6ZSBsw6RuZ2VyZSBSZWFrdGlvbnN6ZWl0ZW4gdmVydXJzYWNoZW4gZG9jaCB3aWVkZXIgaW4gRnJhZ2Ugc3RlbGxlbi4gU28gaXN0IGJlaXNwaWVsc3dlaXNlIHp1IHNlaGVuLCBkYXNzIGVzIGVpbmVuIHN0YXJrZW4gc2lnbmlmaWthbnRlbiBVbnRlcnNjaGllZCB6d2lzY2hlbiBSZWFrdGlvbiAxIHVuZCA4IGdpYnQsIG9id29obCBlcyBzaWNoIGhpZXIgendlaW1hbCB1bSBrb25ncnVlbnRlIFJlaXplIGhhbmRlbHQuIERhcyBpbmtvbmdydWVudGUgR2VnZW5zdMO8Y2sgenVyIDEgaXN0IGRpZSBSZWFrdGlvbiAzLiBad2lzY2hlbiAxIHVuZCAzIGdpYnQgZXMgZWluZW4gVW50ZXJzY2hpZWQsIGhpZXIgdHJpZmZ0IGF1Y2ggZGllIFZlcm11dHVuZyB6dSwgZGEgZGllIFJlYWt0aW9uIDMgZWluZSBow7ZoZXJlIGR1cmNoc2Nobml0dGxpY2hlIFJlYWt0aW9uc3plaXQgYXVmd2Vpc3QgYWxzIFJlYWt0aW9uIDEuDQoNCiMjIFNjaGx1c3Nmb2xnZXJ1bmcNCkF1ZmdydW5kIGRlciBFcmdlYm5pc3NlIGthbm4gc2ljaGVyIGdlc2FndCB3ZXJkZW4sIGRhc3MgZGllIEZhcmJlIGRlciBCdXR0b25zIGF1ZiBqZWRlbiBGYWxsIGVpbmUgQXVzd2lya3VuZyBhdWYgZGllIFJlYWt0aW9uc3plaXQgaGF0LiBFcyBpc3QgamVkb2NoIG5pY2h0IG5hY2h3ZWlzYmFyLCBkYXNzIGRpZXMgYW4gZGVuIGlua29uZ3J1ZW50ZW4gU3RpbXVsaSBsaWVndC4NCg0KDQojIEFub3ZhLVRlc3QgZsO8ciAxMDAgcmljaHRpZ2UgQW50d29ydGVuDQoNCkluc2dlc2FtdCA2IFByb2JhbmRlbiBoYWJlbiBzb3dvaGwgMTAwIEF1ZmdhYmVuIHJpY2h0aWcgZ2Vsw7ZzdCBhbHMgYXVjaCBkZW4gSXNoaWhhcmEtVGVzdCBrb21wbGV0dCBiZXN0YW5kZW4uIERhIHNpZSBhbHNvIGtlaW5lbiBGZWhsZXIgZ2VtYWNodCBoYWJlbiwga8O2bm5lbiBhbGxlIFJlYWt0aW9uZW4sIGRpZSBmw6Rsc2NobGljaGVyd2Vpc2UgZGVyIDIgenVnZW9yZG5lcnQgd3VyZGUgKHdhcyBlaW5lIGZhbHNjaGUgUmVha3Rpb24gYXVmIGVpbmUgQXVmZ2FiZSBpc3QpIGRlciA2IHp1Z2VvcmRuZXQgd2VyZGVuLiBEYW1pdCBpc3QgendhciBlaW4ga2xlaW5lciwgYWJlciBkYWbDvHIga29ycmVrdGVyIERhdGVuc2F0eiB2b3JoYW5kZW4sIG1pdCBkZW0gYXVjaCBub2NobWFsIGRpZSBTaWduaWZpa2FueiB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiB1bnRlcnN1Y2h0IHdpcmQuDQoNCmBgYHtyfQ0KZGZfMTAwIDwtIHN1YnNldChkZl9ub0NCLCBkZl9ub0NCJFJpY2h0aWcgPT0gMTAwKQ0KYGBgDQoNCkRpZSBEYXRlbiBkZXIgNiBQcm9iYW5kZW4gd2VyZGVuIGF1ZiBkaWVzc2VsYmUgV2Vpc2Ugdm9yYmVyZWl0ZXQsIHdpZSBvYmVuIGF1Y2ggc2Nob24uDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zXzEwMCA8LSBkZl8xMDAgJT4lIHNlbGVjdCgtKCJEYXR1bSI6IklzaGloYXJhIERhdWVyIikpDQpkZl9sb25nX3JlYWN0aW9uc18xMDAgPC0gd2lkZVRvTG9uZ1RhYmxlKGRmX2xvbmdfcmVhY3Rpb25zXzEwMCkNCm5hbWVzKGRmX2xvbmdfcmVhY3Rpb25zXzEwMClbbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnNfMTAwKSA9PSAiVGltZSBpbiBtcyJdIDwtICJUaW1lX21zIg0KZGZfbG9uZ19yZWFjdGlvbnNfMTAwW2RmX2xvbmdfcmVhY3Rpb25zXzEwMCA9PSAyXSA8LSA2IA0KZGZfbG9uZ19yZWFjdGlvbnNfMTAwJFJlYWN0aW9uIDwtIGFzLmZhY3RvcihkZl9sb25nX3JlYWN0aW9uc18xMDAkUmVhY3Rpb24pDQpkZl9sb25nX3JlYWN0aW9uc18xMDANCmBgYA0KRGFtaXQgc2luZCA2MDAgTWVzc3dlcnRlIHZvcmhhbmRlbi4gQXVjaCBoaWVyIHdlcmRlbiB2b3IgZGVyIEFuYWx5c2UgZGllIEF1c3JlacOfZXIgZW50ZmVybnQuIA0KDQpJbnNnZXNhbXQgc2luZCAzMiBBdXNyZWnDn2VyIHZvcmhhbmRlbi4NCg0KYGBge3J9DQpvdXRsaWVyc18xMDAgPC0gZGZfbG9uZ19yZWFjdGlvbnNfMTAwICU+JQ0KICBncm91cF9ieShSZWFjdGlvbikgJT4lDQogIGlkZW50aWZ5X291dGxpZXJzKFRpbWVfbXMpDQpvdXRsaWVyc18xMDANCmBgYA0KQXVzc29ydGllcnQgd2VyZGVuIGRpZSA3IGV4dHJlbWVuIEF1c3JlacOfZXIuDQoNCmBgYHtyfQ0KZGZfZXh0cmVtZV9vdXRsaWVyc18xMDAgPC0gc3Vic2V0KG91dGxpZXJzXzEwMCwgb3V0bGllcnNfMTAwJGlzLmV4dHJlbWUgPT0gVFJVRSkNCmRmX2V4dHJlbWVfb3V0bGllcnNfMTAwDQpgYGANCkRhbWl0IHZlcmJsZWliZW4gbm9jaCA1OTMgTWVzc3dlcnRlLg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAgPC0gZGZfbG9uZ19yZWFjdGlvbnNfMTAwICU+JSBhbnRpX2pvaW4oZGZfZXh0cmVtZV9vdXRsaWVyc18xMDAsIGJ5ID0gYygiWiIsICJUaW1lX21zIiwgIlIiLCAiUmVhY3Rpb24iKSkNCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDANCmBgYA0KRGFzIHp1Z2Vow7ZyaWdlIEJveHBsb3QgemVpZ3QgZGllIFZlcnRlaWx1bmcgZGVyIE1lc3N3ZXJ0ZSBhbi4NCg0KYGBge3J9DQpmaWcgPC0gcGxvdF9seSh0eXBlID0gImJveCIpDQpmaWcgPC0gZmlnICU+JSBhZGRfdHJhY2UoeSA9IGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAkVGltZV9tcykNCmZpZw0KYGBgDQpEaWUgVGFiZWxsZSB6ZWlndCBkaWUgRXJnZWJuaXNzZSB3aWVkZXJydW0gaW4gWmFobGVuIGFuLg0KDQpgYGB7cn0NCnN1bW1hcnkoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCRgVGltZV9tc2ApDQpgYGANCkF1ZmbDpGxsaWcgaXN0LCBkYXNzIGRlciBNZWRpYW4gdW0gMTk3IG1zIGjDtmhlciBsaWVndCwgYWxzIGJlaSBkZXIgR2VzYW10Z3J1cHBlLg0KDQpgYGB7cn0NCm5hbWVzKGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDApW25hbWVzKGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDApID09ICJUaW1lIGluIG1zIl0gPC0gIlRpbWVfbXMiDQoNCmFnZ18xMDAgPC0gZGZfbG9uZ19yZWFjdGlvbnNfMTAwICU+JQ0KICBncm91cF9ieShSZWFjdGlvbikgJT4lDQogIGdldF9zdW1tYXJ5X3N0YXRzKFRpbWVfbXMsIHR5cGUgPSAibWVhbl9zZCIpDQoNCmFnZ18xMDANCmBgYA0KQXVjaCBiZWkgZGVuIE1pdHRlbHdlcnRlbiBzaW5kIGjDtmhlcmUgUmVha3Rpb25zemVpdGVuIHp1IHNlaGVuLg0KDQpgYGB7cn0NCmZpZyA8LSBwbG90X2x5KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAsIHggPSB+UmVhY3Rpb24sIHkgPSB+VGltZV9tcywgdHlwZT0iYm94IiwgY29sb3IgPSB+UmVhY3Rpb24pDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoc2hvd2xlZ2VuZCA9IEZBTFNFLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUmVha3Rpb24iKSwgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlplaXQgaW4gbXMiKSkNCmZpZw0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeShkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwJFRpbWVfbXMpDQpgYGANCiMjIFZvcmJlZGluZ3VuZ2VuIHByw7xmZW4NCg0KIyMjIFByw7xmdW5nIGF1ZiBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCkJlaSBkZXIgdmlzdWVsbGVuIFByw7xmdW5nIGF1ZiBOb3JtYWx2ZXJ0ZWlsdW5nIG1pdGhpbGZlIGRlciBRLVEtUGxvdHMgc2NoZWluZW4gZGllIERhdGVuIGRldXRsaWNoIG7DpGhlciBhbiBkZXIgU3RhbmRhcmRub3JtYWx2ZXJ0ZWlsdW5nIHp1IHNlaW4sIGFscyBiZWkgZGVyIEdydXBwZSBtaXQgYWxsZW4gUHJvYmFuZGVuLg0KDQpgYGB7cn0NCm1vZGVsXzEwMCA8LSBsbShUaW1lX21zIH4gUmVhY3Rpb24sIGRhdGEgPSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwKQ0KZ2dxcXBsb3QocmVzaWR1YWxzKG1vZGVsXzEwMCkpDQpgYGANCg0KRGllcyB3aXJkIG5vY2ggZGV1dGxpY2hlciwgd2VubiBkaWUgUS1RLVBsb3RzIGbDvHIgZGllIGVpbnplbG5lbiBSZWFrdGlvbmVuIGJldHJhY2h0ZXQgd2VyZGVuLg0KDQpgYGB7cn0NCmdncXFwbG90KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAsICJUaW1lX21zIiwgZmFjZXQuYnkgPSAiUmVhY3Rpb24iKQ0KYGBgDQpEYSBoaWVyIGRlciBJbXBsZW1lbnRpZXJ1bmdmZWhsZXIgaW0gTmFjaGhpbmVpbiBrb3JyaWdpZXJ0IHdlcmRlbiBrb25udGUsIHNjaGVpbnQgZGllIEFubmFobWUsIGRhc3MgZGllIERhdGVuIHRhdHPDpGNobGljaCBub3JtYWx2ZXJ0ZWlsdCBzaW5kLCByaWNodGlnIHp1IHNlaW4uDQoNCkRlciBTaGFwaXJvLVRlc3Qgc2NobMOkZ3QgendhciBhdWNoIGhpZXIgd2llZGVyIGZlaGwsIGFsbGVyZGluZ3Mgc2luZCBkaWUgcC1XZXJ0ZSBoaWVyIG5pY2h0IGdhbnogc28ga2xlaW4gd2llIGbDvHIgYWxsZSBQcm9iYW5kZW4genVzYW1tZW4uDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgc2hhcGlyb190ZXN0KFRpbWVfbXMpDQpgYGANCg0KDQojIyMgUHLDvGZ1bmcgYXVmIFZhcmlhbnpob21vZ2VuaXTDpHQNCg0KRGVyIExldmVuZS1UZXN0IGlzdCBlcmZvbGdyZWljaCwgZGEgcCA+IDAsMDUgaXN0Lg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAgJT4lIGxldmVuZV90ZXN0KFRpbWVfbXMgfiBSZWFjdGlvbikNCmBgYA0KDQojIyBBbm92YS1UZXN0DQoNCkRhaGVyIHdpcmQgZGVyIEFub3ZhLVRlc3QgZHVyY2hnZWbDvGhydC4NCg0KYGBge3J9DQpyZXNfYW92XzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwICU+JSBhbm92YV90ZXN0KFRpbWVfbXMgfiBSZWFjdGlvbikNCnJlc19hb3ZfMTAwDQpgYGANCk1pdCBwIDwgMCwwNSBpc3QgZGVyIEFub3ZhLVRlc3QgZXJmb2xncmVpY2gsIGRhaGVyIGJlc3RlaGVuIHNpZ25pZmlrYW50ZSBVbnRlcnNjaGllZGUgendpc2NoZW4gZGVuIEdydXBwZW4uDQoNCiMjIFBvc3QtaG9jLUFuYWx5c2UNCg0KRXMgZm9sZ3QgZGllIFBvc3QtaG9jIEFuYWx5c2UsIHdlbGNoZSBkYXMgRXJnZWJuaXMgdm9uIHZvcmhpbiB6dW0gVGVpbCBiZXN0w6R0aWdlbjoNCg0KYGBge3J9DQpwd2NfMTAwIDwtIGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAgJT4lIHR1a2V5X2hzZChUaW1lX21zIH4gUmVhY3Rpb24pDQpwd2NfMTAwDQpgYGANCg0KDQoNCmBgYHtyfQ0KcHdjX3Bsb3RfMTAwIDwtIHB3Y18xMDAgJT4lIGFkZF94eV9wb3NpdGlvbih4ID0gIlJlYWN0aW9uIiwgc3RlcC5pbmNyZWFzZSA9IDEpDQpnZ2JveHBsb3QoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCwgeCA9ICJSZWFjdGlvbiIsIHkgPSAiVGltZV9tcyIpICsNCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB3Y19wbG90XzEwMCwgaGlkZS5ucyA9IFRSVUUpICsNCiAgbGFicygNCiAgICBzdWJ0aXRsZSA9IGdldF90ZXN0X2xhYmVsKHJlc19hb3ZfMTAwKSwNCiAgICBjYXB0aW9uID0gZ2V0X3B3Y19sYWJlbChwd2NfMTAwKQ0KICAgICkNCmBgYA0KRXMgaXN0IHdpZWRlciBlaW4gc2lnbmlmaWthbnRlciBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW4ga29uZ3J1ZW50ZW4gR3J1cHBlbiAxIHVuZCA4IGdlZ2ViZW4uIERpZXNtYWwgaXN0IGF1Y2ggZWluIHNpZ25pZmlrYW50ZXIgVW50ZXJzY2hpZWQgendpc2NoZW4gZGVuIEdydXBwZW4gMSB1bmQgNiBnZWdlYmVuLiBWZXJtdXRldCB3dXJkZSBhbGxlcmRpbmdzLCBkYXNzIGRpZSBzaWduaWZpa2FudGVuIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gR3J1cHBlbiAxIHVuZCAzIGJlc3RlaGVuIHfDvHJkZW4gc293aWUgendpc2NoZW4gZGVuIEdydXBwZW4gNiB1bmQgOC4NCg0KIyMgU2NobHVzc2ZvbGdlcnVuZw0KDQpEaWVzZXMgRXJnZWJuaXMgaXN0IG3DtmdsaWNoZXJ3ZWlzZSBlaW4gSGlud2VpcyBkYXJhdWYsIGRhc3MgZGVyIEF1ZmJhdSBkZXMgRXhwZXJpbWVudHMgbmljaHQgZ2VlaWduZXQgaXN0LCB1bSBoZXJhdXN6dWZpbmRlbiwgb2IgZGllIFJlYWt0aW9uc3plaXQgZHVyY2ggaW5rb25ncnVlbnRlbiBTdGltdWxpIGJlZWluZmx1c3N0IHdpcmQuIA0KQmVpIGRlbiBPcmlnaW5hbGV4cGVyaW1lbnRlbiB2b24gSm9obiBSaWRsZXkgU3Ryb29wIHd1cmRlbiBnZXRyZW5udGUgRXhwZXJpbWVudGUgenUga29uZ3J1ZW50ZW4gdW5kIGlua29uZ3J1ZW50ZW4gUmVpemVuIGdlbWFjaHQgdW5kIGRhbm4gZGllIER1cmNoc2Nobml0dHN6ZWl0ZW4gZGVyIEV4cGVyaW1lbnRlIG1pdGVpbmFuZGVyIHZlcmdsaWNoZW4uIFNvIHNvbGx0ZW4gZGllIFByb2JhbmRlbiB6dW7DpGNoc3QgZGFzIEZhcmJ3b3J0IGluIHNjaHdhcnplciBTY2hyaWZ0IHZvcmxlc2VuLiBBbnNjaGxpZcOfZW5kIHNvbGx0ZW4gZGllIFByb2JhbmRlbi9Qcm9iYW5kaW5uZW4gZGllIEZhcmJlIGluIGRlciBkYXMgV29ydCBnZXNjaHJpZWJlbiBpc3QsIGFuc3RlbGxlIGRlcyBXb3J0cywgdm9ybGVzZW4uIERpZXNlIFfDtnJ0ZXIgc2luZCBpbmtvbmdydWVudCAoei5CLiBHcsO8biBpbiByb3RlciBTY2hyaWZ0IGdlc2NocmllYmVuKS4gWnVtIFNjaGx1c3Mgd3VyZGVuIGZhcmJpZ2UgUXVhZHJhdGUgcHLDpHNlbnRpZXJ0LCB3b2JlaSBkaWUgRmFyYmUgZ2VuYW5udCB3ZXJkZW4gc29sbHRlLiANCg0KRWluIMOkaG5saWNoZXMgVm9yZ2VoZW4ga8O2bm50ZSBhdWNoIGbDvHIgenVrw7xuZnRpZ2UgRXhwZXJpbWVudGUgZ2V3w6RobHQgd2VyZGVuLiBEaWUgQnV0dG9ucyB3w7xyZGVuIGRhbm4gaW0gZXJzdGVuIER1cmNobGF1ZiBiZWlkZSBkaWVzc2VsYmUgRmFyYmUgYmVzaXR6ZW4uIEltIHp3ZWl0ZW4gRHVyY2hsYXVmIHfDvHJkZW4gZGllIEJ1dHRvbnMgaW1tZXIga29uZ3J1ZW50ZSBGYXJiZW4genUgZGVuIEJ1dHRvbnRpdGVsbiBiZXNpdHplbi4gSW0gZHJpdHRlbiBEdXJjaGxhdWYgaW1tZXIgaW5rb25ncnVlbnRlIEZhcmJlbiB6dSBkZW4gQnV0dG9udGl0ZWxuLiBJbiBlaW5lbSB2aWVydGVuIER1cmNobGF1ZiBrw7ZubnRlIGluIGRlbiBCdXR0b25zIG5pY2h0cyBkcmluIHN0ZWhlbiB1bmQgc2llIGjDpHR0ZW4gbGVkaWdsaWNoIGVpbmUgcm90ZSBiencuIGdyw7xuZSBIaW50ZXJncnVuZGZhcmJlIHVuZCBkaWUgUHJvYmFuZGVuIHNvbGxlbiBiZWkgZWluZXIgcmljaHRpZ2VuIEF1ZmdhYmUgYXVmIGRlbiBncsO8bmVuIHVuZCBiZWkgZWluZXIgZmFsc2NoZW4gQXVmZ2FiZSBhdWYgZGVuIHJvdGVuIEJ1dHRvbiBkcsO8Y2tlbi4gRGFuYWNoIGvDtm5udGVuIGRpZSBFcmdlYm5pc3NlIGRlciBlaW56ZWxlbmVuIEV4cGVyaW1lbnRlIG1pdGVpbmFuZGVyIHZlcmdsaWNoZW4gd2VyZGVuIHVuZCBhdWYgc2lnbmlmaWthbnRlIFVudGVyc2NoaWVkZSB1bnRlcnN1Y2h0IHdlcmRlbi4NCg0KIyBRdWVsbGVuDQoNCkFscyBPcmllbnRpZXJ1bmcgenVyIER1cmNoZsO8aHJ1bmcgZGVzIEFub3ZhLVRlc3RzIHd1cmRlIGRpZXNlcyBUdXRvcmlhbCBiZWZvbGd0Og0KaHR0cHM6Ly93d3cuZGF0YW5vdmlhLmNvbS9lbi9sZXNzb25zL2Fub3ZhLWluLXIvDQoNCk9yaWdpbmFscGFwZXIgdm9uIEpvaG4gUmlkbGV5IFN0cm9vcDogXA0KaHR0cDovL2hkbC5oYW5kbGUubmV0LzExODU4LzAwLTAwMU0tMDAwMC0wMDJDLTVBREItNw==